package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	user_routers "go-web-admin/app/user/routers"
	"go-web-admin/config"
	"go-web-admin/jwt"
	"go-web-admin/logger"
	"go-web-admin/middleware"
	"go-web-admin/mysql"
	"go-web-admin/redis"
	"go-web-admin/response"
	"go-web-admin/server"
	"go-web-admin/utils"
)

func main() {

	// 加载配置文件
	conf, err := config.LoadConfig()
	if err != nil {
		panic(err)
		return
	}
	loggerConfig := conf.Logger
	serverConfig := conf.Server
	mysqlConfig := conf.Mysql
	redisConfig := conf.Redis
	jwtConfig := conf.Jwt

	// 初始化日志
	logger.InitLogger(&loggerConfig)
	// 初始化数据库
	mysql.InitMysql(&mysqlConfig)
	// 初始化redis
	redis.InitClient(redisConfig)
	// 初始化ID雪花算法
	utils.InitSnowflake("2020-07-09", 1)
	// 初始化JWT
	jwt.InitJwtConfig(&jwtConfig)

	// 创建一个默认的路由引擎
	gin.SetMode(serverConfig.Mode)
	router := gin.Default()

	// 静态资源访问路径设置：
	// 当访问 /static/ 开头的 URL 时，从 ./static 目录中查找对应文件
	router.Static("/static", "./static")

	// 注册中间件: JWTAuthMiddleware
	router.Use(middleware.JWTAuthMiddleware)
	// 注册中间件: 使用自定义错误处理中间件
	router.Use(middleware.ErrorHandler)
	// 注册中间件: 统一配置500
	router.Use(middleware.SystemErrorHandler)

	// 注册路由
	user_routers.UserRouter(router)

	// 配置统一的 404错误
	router.NoRoute(func(c *gin.Context) {
		response.FailNoRoute(c)
		return
	})

	// 配置路由
	router.GET("/ping", func(c *gin.Context) {

		fmt.Println(serverConfig.Port)

		//log.Info("info 日志....")
		//log.Error("buzzerror 日志")

		c.JSON(200, gin.H{
			"message": "pong",
		})
	})

	// 启动服务
	server.Run(serverConfig, router)
}
